using System;
using System.Collections.Generic;
using System.Text;

namespace RRHH.Competencias.Entities
{
    /// <summary>
    /// Representa las iniciativas para mejorar las capacidades de los colaboradores
    /// mediante el dictado de cursos
    /// </summary>
    public class Accion
    {
        private long accion_id;
        private string nombre;
        private string descripcion;
        private Capacidad capacidad;
        private List<Colaborador> colaboradores;
        private DateTime fechaAlta;
        private List<Curso> cursos;
        private DateTime fechaCierre;
        private List<ComentarioAccion> comentarios;

        public Accion(long id, string nombre)
        {
            this.accion_id = id;
            this.nombre = nombre;
        }

        #region Propiedades
        public long Id
        {
            get { return accion_id; }
            set { accion_id = value; }
        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

        public Capacidad Capacidad
        {
            get { return capacidad; }
            set { capacidad = value; }
        }

        public List<Colaborador> Colaboradores
        {
            get { return colaboradores; }
        }

        public DateTime FechaAlta
        {
            get { return fechaAlta; }
            set { fechaAlta = value; }
        }

        public List<Curso> Cursos
        {
            get { return cursos; }
        }

        public DateTime FechaCierre
        {
            get { return fechaCierre; }
            set { fechaCierre = value; }
        }

        public List<ComentarioAccion> Comentarios
        {
            get { return comentarios; }
        }
        #endregion

        #region Metodos
        public void AgregarColaborador(Colaborador colaborador)
        {
            if (colaboradores == null) colaboradores = new List<Colaborador>();
            colaboradores.Add(colaborador);
        }

        public void QuitarColaborador(Colaborador colaborador)
        {
            if (colaboradores == null) return;
            colaboradores.Remove(colaborador);
        }

        public int ContarColaborador()
        {
            if (colaboradores == null) return 0;
            return colaboradores.Count;
        }

        public void AgregarCurso(Curso curso)
        {
            if (curso == null) cursos = new List<Curso>();
            cursos.Add(curso);
        }

        public void QuitarCurso(Curso curso)
        {
            if (cursos == null) return;
            cursos.Remove(curso);
        }

        public int ContarCursos()
        {
            if (cursos == null) return 0;
            return cursos.Count;
        }

        public void AgregarComentario(ComentarioAccion comentario)
        {
            if (comentarios == null) comentarios = new List<ComentarioAccion>();
            comentarios.Add(comentario);
        }

        public void QuitarComentario(ComentarioAccion comentario)
        {
            if (comentarios == null) return;
            comentarios.Remove(comentario);
        }

        public int ContarComentarios()
        {
            if (comentarios == null) return 0;
            return comentarios.Count;
        }

        public override bool Equals(object obj)
        {
            Accion comparar;

            if (obj == null) return false;

            try
            {
                comparar = (Accion)obj;
            }
            catch (Exception)
            {
                return false;
            }

            if (accion_id.Equals(comparar.accion_id)) return true;
            return false;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
        #endregion
    }
}
